/*
 * FrontCoding.cpp
 *
 *  Created on: 16/10/2011
 *      Author: diego
 */

#include "FrontCoding.h"

FrontCoding::FrontCoding(int n) {
	this->n = n;
	this->cant_nodos = 0;
	this->lista = new Lista<string>();
}

size_t FrontCoding::comprimir(string* termino){
	if (this->cant_nodos == 0){
		this->lista->agregar(*termino);
		this->cant_nodos = 1;
		return 0;
	}

	if (this->cant_nodos == this->n){

		this->reiniciarLista();
		this->lista->agregar(*termino);
		this->cant_nodos = 1;
		return 0;
	}

	IteradorLista<string> it = this->lista->iterador();
	it.ultimo();

	string ultimo_termino = it.get();
	size_t i;
	for (i = 0; i < termino->length() && i < ultimo_termino.length(); i++){
		if ((*termino)[i] != ultimo_termino[i]){
			this->lista->agregar(*termino);
			this->cant_nodos++;
			termino->erase(0, i);
			return i;
		}
	}
	this->lista->agregar(*termino);
	this->cant_nodos++;
	termino->erase(0, i);
	return i;
}

void FrontCoding::reiniciarLista(){
	delete this->lista;
	this->lista = new Lista<string>();

	this->cant_nodos = 0;
}

FrontCoding::~FrontCoding() {
	delete this->lista;
}

